<?php
class Service_Function {
	
	public static function utf8_strlen($s) {
		return preg_match_all('/./u', $s, $tmp);
	}
	
	/**
	 * Возвращает подстроку с учетом тго, что в utf8  некоторые символы занимают 2 байта
	 *
	 * @param string $s
	 * @param int $offset
	 * @param int $len
	 * @return string
	 */
	public static function utf8_substr($s, $offset, $len = 'all') {
		if ($offset < 0) $offset = self::utf8_strlen($s) + $offset;
		if ($len != 'all') {
			if ($len < 0) $len = self::utf8_strlen($s) - $offset + $len;
			$xlen = self::utf8_strlen($s) - $offset;
			$len = ($len>$xlen) ? $xlen : $len;
			preg_match('/^.{' . $offset . '}(.{0,'.$len.'})/us', $s, $tmp);
		}
		else {
			preg_match('/^.{' . $offset . '}(.*)/us', $s, $tmp);
		}
		return (isset($tmp[1])) ? $tmp[1] : false;
	}
	
	
	
	/**
	 * Метод возвращает подстроку с троеточием на конце, если длина исходной строки меньше подстроки. В противном случае возвращает исходную строку
	 *
	 * @param string $str
	 * @param int $limit
	 * @return string
	 */
	public static function utf8_string_with_limit($str, $limit, $bySpace = false, $useMoreImage = false, $urlForMoreImage = null, $noindexMore = false) {
		if (self::utf8_strlen($str) <= $limit + 1) return $str;
		else {
			if ($bySpace) {
				$str = self::utf8_substr($str, 0, $limit + 1);
				do {
					$sym = self::utf8_substr($str, -1, 1);
					$str = self::utf8_substr($str, 0, self::utf8_strlen($str) - 1);
				} while ($sym != ' ' && self::utf8_strlen($str) > 10);
				if (!$useMoreImage) $str .= '...';
				else {
					if ($urlForMoreImage && $noindexMore) $str .= '<noindex>';
					if ($urlForMoreImage) $str .= '<a href="' . $urlForMoreImage . '"' . ($noindexMore ? ' rel="nofollow"' : null) . ' class="try" data-element="arrow-icon" data-action="hotel-page">';
					$str .= '<img src="' . W_IMAGES . 'icons/more.png" class="moreIcon" alt="" />';
					if ($urlForMoreImage) $str .= '</a>';
					if ($urlForMoreImage && $noindexMore) $str .= '</noindex>';
				}
				return $str;
			}
			else return self::utf8_substr($str, 0, $limit) . '...';
		}
	}
	
}